/**
 * 
 */
package appStarshipPushups.server.form;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Toolkit;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame;

import appStarshipPushups.server.StarshipPushupsServer;

/**
 * Cette classe représente la fenêtre principale du serveur.
 * @author Adam Labranche
 */
public class AppFrame extends JFrame implements WindowListener
{
	public static final long serialVersionUID = 1L;
	private static final Color COLOR_BG = Color.black;
	private static final String TITLE = "Starship Pushup's 2 Serveur";
	
	private Content panMain = new Content();
	/**
	 * C'est le constructeur par défaut.
	 */
	public AppFrame()
	{
		super();
		this.init();
	}
	
	/**
	 * Cette fonction initialise les composantes de l'interface.
	 */
	private void init()
	{
		this.setLayout(new BorderLayout());
		this.setTitle(AppFrame.TITLE);
		this.setResizable(false);
		this.setBackground(AppFrame.COLOR_BG);
		this.getContentPane().setBackground(AppFrame.COLOR_BG);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		this.add(panMain, BorderLayout.CENTER);
		
		this.pack();
		
		// On centre la fenêtre dans l'écran de l'utilisateur.
		this.setLocation((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth() / 2 - this.getWidth() / 2),
				(int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight() / 2 - this.getHeight() / 2));
	}
    /**
     * Invoked the first time a window is made visible.
     */
    public void windowOpened(WindowEvent e){}

    /**
     * Invoked when the user attempts to close the window
     * from the window's system menu.
     */
    public void windowClosing(WindowEvent e)
    {
    	StarshipPushupsServer.getInstance().stopServer();
    	this.dispose();
    	System.exit(0);
    }

    /**
     * Invoked when a window has been closed as the result
     * of calling dispose on the window.
     */
    public void windowClosed(WindowEvent e){}

    /**
     * Invoked when a window is changed from a normal to a
     * minimized state. For many platforms, a minimized window 
     * is displayed as the icon specified in the window's 
     * iconImage property.
     * @see java.awt.Frame#setIconImage
     */
    public void windowIconified(WindowEvent e){}

    /**
     * Invoked when a window is changed from a minimized
     * to a normal state.
     */
    public void windowDeiconified(WindowEvent e){}

    /**
     * Invoked when the Window is set to be the active Window. Only a Frame or
     * a Dialog can be the active Window. The native windowing system may
     * denote the active Window or its children with special decorations, such
     * as a highlighted title bar. The active Window is always either the
     * focused Window, or the first Frame or Dialog that is an owner of the
     * focused Window.
     */
    public void windowActivated(WindowEvent e){}

    /**
     * Invoked when a Window is no longer the active Window. Only a Frame or a
     * Dialog can be the active Window. The native windowing system may denote
     * the active Window or its children with special decorations, such as a
     * highlighted title bar. The active Window is always either the focused
     * Window, or the first Frame or Dialog that is an owner of the focused
     * Window.
     */
    public void windowDeactivated(WindowEvent e){}
}
